package com.bosssoft.trainee.nontax.service;

import com.bosssoft.trainee.nontax.entity.dto.RoleDto;
import com.bosssoft.trainee.nontax.entity.dto.TreeNode;
import com.bosssoft.trainee.nontax.entity.po.Role;
import com.bosssoft.trainee.nontax.entity.vo.RoleVo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @Description: (Role)表服务接口
 * @author Luo WenLong
 * @since 2022-06-12 10:16:45
 */
public interface RoleService {

    /**
     * @Description: 获取符合要求的所有角色
     * @param role role
     * @return: java.util.List<com.bosssoft.trainee.nontax.entity.vo.RoleVo>
     * @Author: Luo WenLong
     * @Date: 2022/6/26 13:35
     */
    List<RoleVo> queryAllByRole(RoleDto role);

    /**
     * @Description: 获取页面的授权角色信息
     * @param pageName page name
     * @return: java.util.Map<java.lang.String,java.util.List<java.lang.String>>
     * @Author: Luo WenLong
     * @Date: 2022/6/26 13:31
     */
    Map<String, List<String>> getPageRolesByRoles(String pageName);

    /**
     * @Description: 获取所有角色数据用TreeNode模式返回
     * @return: java.util.List<com.bosssoft.trainee.nontax.entity.dto.TreeNode>
     * @Author: Luo WenLong
     * @Date: 2022/6/26 13:30
     */
    List<TreeNode> queryAllInTreeNodeTemplate();

    /**
     * @Description: 获取目标用户的手游角色
     * @param userId user id
     * @return: java.util.ArrayList<com.bosssoft.trainee.nontax.entity.vo.RoleVo>
     * @Author: Luo WenLong
     * @Date: 2022/6/26 13:30
     */
    ArrayList<RoleVo> getRolesByUserId(Integer userId);


    /**
     * 通过ID查询单条数据
     *
     * @param roleId 主键
     * @return 实例对象
     */
    RoleVo queryById(Integer roleId);

    /**
     * 分页查询
     *
     * @param role 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
    Page<Role> queryByPage(RoleDto role, PageRequest pageRequest);

    /**
     * 新增数据
     *
     * @param role 实例对象
     * @return 实例对象
     */
    RoleVo insert(RoleDto role);

    /**
     * 修改数据
     *
     * @param role 实例对象
     * @return 实例对象
     */
    RoleVo update(RoleDto role);

    /**
     * 通过主键删除数据
     *
     * @param roleId 主键
     * @return 是否成功
     */
    boolean deleteById(Integer roleId);

    /**
     * @Description: 判断角色能否删除
     * @param roleId role id
     * @return: java.lang.String
     * @Author: Luo WenLong
     * @Date: 2022/6/22 12:24
     */
    String canDeleteRole(Integer roleId);

}
